/**
 * 简单的速率限制中间件
 * 用于限制API请求频率
 */

// 简单的内存存储（在生产环境中应使用Redis等）
const rateLimitStore = new Map();

// 清理过期记录的定时器
setInterval(() => {
  const now = Date.now();
  for (const [key, record] of rateLimitStore.entries()) {
    // 如果记录超过1小时，则清理
    if (now - record.timestamp > 3600000) {
      rateLimitStore.delete(key);
    }
  }
}, 60000); // 每分钟清理一次

/**
 * 速率限制中间件
 * @param {number} maxRequests - 最大请求数
 * @param {number} windowMs - 时间窗口（毫秒）
 */
function rateLimiter(maxRequests = 100, windowMs = 15 * 60 * 1000) {
  return (req, res, next) => {
    const ip = req.ip || req.connection.remoteAddress;
    const key = `${ip}:${req.path}`;
    const now = Date.now();
    
    // 获取当前IP和路径的记录
    let record = rateLimitStore.get(key);
    
    // 如果没有记录或时间窗口已过期，则创建新记录
    if (!record || now - record.timestamp > windowMs) {
      record = {
        count: 1,
        timestamp: now
      };
      rateLimitStore.set(key, record);
      next();
      return;
    }
    
    // 增加请求数
    record.count++;
    
    // 检查是否超过限制
    if (record.count > maxRequests) {
      return res.status(429).json({
        error: 'TooManyRequests',
        message: '请求过于频繁，请稍后再试'
      });
    }
    
    // 更新记录
    rateLimitStore.set(key, record);
    next();
  };
}

module.exports = rateLimiter;